/**
 * 
 */
package com.tencent.common;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author tangqh
 *
 */
public class DateUtil {

	public static SimpleDateFormat format_yyyyMMdd = new SimpleDateFormat("yyyyMMdd");
	public static SimpleDateFormat format_HHmmss = new SimpleDateFormat("HHmmss");
	public static SimpleDateFormat format_yyyy_MM_dd = new SimpleDateFormat("yyyy-MM-dd");
	public static SimpleDateFormat format_yyyyMMddHHmmss = new SimpleDateFormat("yyyyMMddHHmmss");
	public static SimpleDateFormat format_yyyy_MM_dd_HH_mm_ss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	public static Calendar calendar = Calendar.getInstance();

	
	public static String getDateFormate(Date date){
		return format_yyyy_MM_dd_HH_mm_ss.format(date);
	}
	
	/**
	 * 获取当天，[年-月-日]格式的日期
	 * 
	 * @return Current Date String，format : yyyyMMddHHmmss
	 */
	public static String getFullDateString() {
		return format_yyyy_MM_dd_HH_mm_ss.format(new Date());
	}

	/**
	 * 获取当天，[年-月-日]格式的日期
	 * 
	 * @return Current Date String，format : yyyyMMddHHmmss
	 */
	public static String getFullDateNumber() {
		return format_yyyyMMddHHmmss.format(new Date());
	}

	public static String getHHmmss() {
		return format_HHmmss.format(new Date());
	}
	/**
	 * 获取当天，[年-月-日]格式的日期
	 * 
	 * @return Current Date String，format : yyyyMMddHHmmss
	 */
	public static String getFullDateNumberOffsetMinute(Integer offsetMinute) {
		return format_yyyyMMddHHmmss.format(offsetMinute(new Date(), offsetMinute));
	}

	/**
	 * 在某个时间基础上，往前推或者往后推几小时，返回[年-月-日]格式的日期
	 * 
	 * @param date
	 *            在某个时间点基础上前移或者后移
	 * @param offsetDay
	 *            正数往后移天数，负数向前移天数
	 * @return Date String，format : yyyy-MM-dd
	 */
	public static Date offsetMinute(Date date, Integer offsetMinute) {
		calendar.setTime(date);
		calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + offsetMinute);// 正数往后移天数，负数向前移天数
		return calendar.getTime();
	}
	
	/**
	 * 在某个时间基础上，往前推或者往后推几小时，返回[年-月-日]格式的日期
	 * 
	 * @param date
	 *            在某个时间点基础上前移或者后移
	 * @param offsetDay
	 *            正数往后移天数，负数向前移天数
	 * @return Date String，format : yyyy-MM-dd
	 */
	public static Date offsetHour(Date date, Integer offsetHour) {
		calendar.setTime(date);
		calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + offsetHour);// 正数往后移天数，负数向前移天数
		return calendar.getTime();
	}


	/**
	 * 在某个时间基础上，往前推或者往后推几天，返回[年-月-日]格式的日期
	 * 
	 * @param date
	 *            在某个时间点基础上前移或者后移
	 * @param offsetDay
	 *            正数往后移天数，负数向前移天数
	 * @return Date String，format : yyyy-MM-dd
	 */
	public static Date offsetDate(Date date, Integer offsetDate) {
		calendar.setTime(date);
		calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + offsetDate);// 正数往后移天数，负数向前移天数
		return calendar.getTime();
	}

	/**
	 * 在某个时间基础上，往前推或者往后推几个月，返回[年-月-日]格式的日期
	 * 
	 * @param date
	 *            在某个时间点基础上前移或者后移
	 * @param offsetDay
	 *            正数往后移天数，负数向前移天数
	 * @return Date String，format : yyyy-MM-dd
	 */
	public static Date offsetMonth(Date date, Integer offsetMonth) {
		calendar.setTime(date);
		calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + offsetMonth);// 正数往后移月份，负数向前移月份
		return calendar.getTime();
	}

	public static Date parse(String date) {
		try {
			return format_yyyyMMddHHmmss.parse(date);
		} catch (Exception e) {
			return null;
		}
	}
}
